#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <errno.h> // 包含 errno

int main(int argc, char const *argv[])
{
    // 创建管道
    if (mkfifo("myfifo", 0666) == -1) {
        perror("mkfifo");
        exit(EXIT_FAILURE);
    }

    // 打开管道文件
    int fd = open("myfifo", O_WRONLY);
    if (fd == -1) {
        perror("open");
        exit(EXIT_FAILURE);
    }

    // 读取标准输入，并写入管道
    ssize_t read_num;
    char buf[100];
    while ((read_num = read(STDIN_FILENO, buf, sizeof(buf))) > 0) {
        ssize_t bytes_written = write(fd, buf, read_num);
        if (bytes_written == -1) {
            perror("write");
            close(fd); // 关闭文件描述符
            exit(EXIT_FAILURE);
        }
    }

    if (read_num == -1) {
        perror("read");
        close(fd); // 关闭文件描述符
        exit(EXIT_FAILURE);
    }

    // 关闭文件描述符
    close(fd);
    unlink("myfifo"); // 删除管道文件

    return 0;
}
